home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Graphics / Misc / Wood.0.72 / Sources / WoodDoc_TargetAction.m < prev    next >
Encoding:
Text File  |  1995-08-29  |  5.6 KB  |  274 lines

  1. #import "wooddoc.h"
  2.  
  3. @implementation WoodDoc (TargetAction)
  4.  
  5. - changeLayout:sender
  6. {
  7.     NXRect dummyRect;
  8.     
  9.     if([[NXApp pageLayout:self] runModal] == NX_OKTAG){
  10.         [window disableFlushWindow];
  11.         calcFrame(printInfo, &dummyRect);
  12.         [treeView checkResize:&dummyRect for:tree];
  13.         [self dirty:YES];
  14.         [scrollView display];
  15.         [window reenableFlushWindow];
  16.         [window flushWindow];
  17.         [window makeFirstResponder:treeView];
  18.     }
  19.     return self;
  20. }
  21.  
  22. - save:sender
  23. {
  24.     id savepanel;
  25.     const char    *dir = NULL;
  26.     char *oldName = NULL;
  27.     BOOL changeName = NO;    
  28.     
  29.      if(theOOEClient != nil) {
  30.         [self updateOOETarget:sender];
  31.         [self clean:self];
  32.         return self;
  33.     }
  34.     savepanel = [SavePanel new];
  35.     [savepanel setAccessoryView:nil];
  36.     [savepanel setRequiredFileType:[[self class] docExtension]];
  37.     if (![self hasSavedDocument]) {
  38.         changeName = YES;
  39.         if (![savepanel runModalForDirectory:directory file:name]) 
  40.             return nil;
  41.     }
  42.     if(changeName){
  43.         oldName = NXCopyStringBufferFromZone([self fileName],[self zone]);
  44.         [self setName:[savepanel filename]];
  45.     }
  46.     if([self save]){
  47.         [self dirty:NO];
  48.         [self setSavedDocument:YES];
  49.         dir = [self directory];
  50.         [NXApp setDefaultDir:dir];
  51.         return self;
  52.     } else {
  53.         if(changeName){
  54.             [self setName:oldName];        
  55.             NX_FREE(oldName);
  56.         }
  57.         return nil;
  58.     }
  59. }
  60.  
  61. - saveAs:sender
  62. {
  63.     BOOL oldSavedFile, oldDirty;
  64.     
  65.     oldDirty = [self needsSaving];
  66.     oldSavedFile = [self hasSavedDocument];
  67.     [self dirty:YES];
  68.     [self setSavedDocument:NO];
  69.     if ([self save:sender]) 
  70.         return self;
  71.     else {
  72.         [self setSavedDocument:oldSavedFile];
  73.         [self dirty:oldDirty];
  74.         return nil;
  75.     }
  76. }
  77.  
  78. - saveTo:sender
  79. {    
  80.     id savepanel;
  81.     NXStream *stream;
  82.     
  83.     savepanel = [SavePanel new];
  84.     if(!saveToAccessoryWindow)
  85.         [NXApp loadNibSection:"SaveTo.nib" owner:self withNames:NO];
  86.     [savepanel setAccessoryView:[saveToAccessoryWindow contentView]];
  87.     [savepanel setTitle:"Save to"];
  88.     [savepanel setRequiredFileType:"diagram2"];
  89.     //if(![savepanel runModalForDirectory:NXHomeDirectory() file:"Untitled.diagram2"])
  90.     if(![savepanel runModal]) 
  91.         return nil;
  92.     [printInfo setHorizontalPages:[treeView canvasX]];
  93.     [printInfo setVerticalPages:[treeView canvasY]];    
  94.     if([saveToAccessoryControl selectedCol] == 0)
  95.         [Tree saveToD2Tree:tree fromView:treeView toFile:[savepanel filename] printInfo:printInfo];
  96.     else {
  97.         stream = NXOpenMemory(NULL,0,NX_WRITEONLY);
  98.         [treeView writePSToStream:stream usingTree:tree]; 
  99.         NXSaveToFile(stream, [savepanel filename]);
  100.         NXCloseMemory(stream,NX_FREEBUFFER);
  101.     }    
  102.     [savepanel setTitle:"Save"];
  103.     [savepanel setRequiredFileType:[[self class] docExtension]];
  104.     [savepanel setAccessoryView:nil];
  105.     return self;
  106. }
  107.  
  108. - selectSaveToFormat:sender
  109. {
  110.     id savepanel;
  111.     
  112.     savepanel = [SavePanel new];
  113.     if([saveToAccessoryControl selectedCol] == 0)
  114.         [savepanel setRequiredFileType:"diagram2"];
  115.     else
  116.         [savepanel setRequiredFileType:"eps"];
  117.     return self;
  118. }
  119.     
  120. - revertToSaved:sender
  121. {
  122.     WoodDoc *dummy;
  123.     
  124.     if (![self hasSavedDocument] ||
  125.         ![self needsSaving] ||
  126.         (NXRunAlertPanel(localString("Revert"),
  127.                          localString("%s has been edited.  Are you sure you want to undo changes?"),
  128.                          localString("Revert"),
  129.                          localString("Cancel"), NULL, name) != NX_ALERTDEFAULT)) {
  130.             return self;
  131.     }
  132.     dummy = self;
  133.     [[self class] setIncPos:NO];
  134.     self = [[[NXApp docClass] allocFromZone:[NXApp newDocZone]] initFromFile:[dummy fileName]];
  135.     [[self class] setIncPos:YES];
  136.     [[dummy window] close];
  137.     return self;
  138. }
  139.  
  140. - copy:sender;
  141. {    
  142.     return [self copyToPasteboard:[Pasteboard new]];
  143. }
  144.  
  145.  
  146. - cut:sender
  147. {    
  148.     if([self copyToPasteboard:[Pasteboard new]])
  149.         return [self delete:self];
  150.     return nil;
  151. }
  152.  
  153. - paste:sender
  154. {    
  155.     return [self pasteFromPasteboard:[Pasteboard new]];
  156. }
  157.  
  158. - delete:sender
  159. {    
  160.     if(!lastSelectedNode)
  161.         return self;
  162.     if(lastSelectedNode == tree){
  163.         [undoManager freeUndoArgsOnRecordDiscard];
  164.         [undoManager setUndoName:"Deletion"];
  165.         [undoManager setRedoName:"Addition"];
  166.         [[undoManager setUndoTarget:self] makeAddTree:tree];
  167.         tree = lastSelectedNode = nil;
  168.         [self setEmpty:YES];
  169.         [self updateViewsDirty:YES rect:NULL flag:UPDATE_ALL];
  170.     } else
  171.         [[lastSelectedNode parent] removeChild:lastSelectedNode];
  172.     [[NXApp inspectorManager] revert:self];
  173.     return self;
  174. }
  175.  
  176. - add:sender
  177. {
  178.     [self makeAddTree:[[Tree allocFromZone:[self zone]] initLabel:NULL props:&defaultProps]];
  179.     return self;
  180. }
  181.  
  182. - addFromFilter:sender
  183. {
  184.     id filter;
  185.     
  186.     filter = [NXApp filter:[[sender selectedCell] tag]];
  187.     if([filter conformsTo:@protocol(PFilter)]){
  188.         [self makeAddTree:[[filter class] filterWithProps:&defaultProps inZone:[self zone]]];
  189.     } 
  190.     return self;
  191. }
  192.  
  193. - print:sender
  194. {
  195.     [treeView printPSCode:nil];
  196.     return self;
  197. }
  198.  
  199. - copyStyle:sender;
  200. {    
  201.     return [self copyStyleToPasteboard:[Pasteboard new]];
  202. }
  203.  
  204. - pasteStyle:sender
  205. {    
  206.     return [self pasteStyleFromPasteboard:[Pasteboard new]];
  207. }
  208.  
  209. - promoteStyle:sender;
  210. {
  211.     if(!lastSelectedNode)
  212.         return nil;
  213.     [lastSelectedNode applyStyleToSubtree];
  214.     return self;
  215. }
  216.  
  217. - toggleMarker:sender
  218. {
  219.     showMarker = !showMarker;
  220.     [self updateViewsDirty:NO rect:NULL flag:UPDATE_TREEVIEW];
  221.     return self;    
  222. }    
  223.  
  224. - changeFont:sender
  225. {
  226.     if(!lastSelectedNode)
  227.         return nil;
  228.     [lastSelectedNode changeFont:sender];
  229.     return self;
  230. }
  231.  
  232. - changeZip:sender
  233. {
  234.     if(!lastSelectedNode)
  235.         return nil;
  236.     [lastSelectedNode changeZipped];
  237.     return self;
  238. }
  239.  
  240. - changeDescription:sender
  241. {
  242.     if(!lastSelectedNode)
  243.         return nil;
  244.     [lastSelectedNode changeDescriptionFrom:[textView docView]];
  245.     textViewSaved = YES;
  246.     return self;
  247. }
  248.  
  249. - undo:sender
  250. {
  251.     [undoManager undo:sender];
  252.     return self;
  253. }
  254.  
  255. - redo:sender
  256. {
  257.     [undoManager redo:sender];
  258.     return self;
  259. }
  260.  
  261. - clean:sender
  262. {
  263.     [window setDocEdited:NO];
  264.     return self;
  265. }
  266.  
  267. - close:sender
  268. {
  269.     [window performClose:self];
  270.     return self;
  271. }
  272.  
  273. @end
  274.